import request from '@/utils/request'
import internal from 'stream'

// 登录请求类型
export interface LoginRequest {
  username?: string
  password?: string
  phone?: string
  code?: string    // 短信验证码
  captcha?: string // 图形验证码
  loginType: 'account' | 'phone' // 登录类型
}

export interface RegisterRequest {
  name: string      // 姓名
  phone: string     // 手机号
  email: string     // 邮箱
  password: string  // 密码
  code: string      // 短信验证码
  captcha: string   // 图形验证码
}

export interface SendSmsCodeRequest {
  phone: string;
  captcha: string; // 添加图形验证码字段
}

//
export interface ResetPasswordRequest {
  phone: string       // 手机号
  code: string       // 短信验证码
  newPassword: string // 新密码
}

// 通用响应类型
export interface ApiResponse<T = any> {
  code: number | string
  data: T | null
  msg: string | null
}

// 获取图形验证码
export const getCaptcha = () => {
  // 生成一个随机参数，避免浏览器缓存
  const timestamp = new Date().getTime()
  // 直接返回图片URL
  return `/api/auth/notify?t=${timestamp}`
}

// 发送短信验证码
export const sendCode = (data: SendSmsCodeRequest) => {
  return request.post<ApiResponse>('/api/auth/register_captcha', data)
}

// 统一登录接口 账号密码/短信登录两种方式
export const login = (data: LoginRequest) => {
  return request.post('/api/auth/login', data)
}

// 注册
export const register = (data: RegisterRequest) => {
  return request.post<ApiResponse>('/api/auth/register', data)
} 

// 找回密码
export const resetPassword = (data: ResetPasswordRequest) => {
  return request.post<ApiResponse>('/api/auth/reset-password', data)
}

//下面是mainlayout界面需要的接口
export interface UserInfo {
  id: string
  username: string
  phone: string
  email: string
}

// 修改密码请求接口
export interface ChangePasswordRequest {
  oldPassword: string
  newPassword: string
}

// 定义用户信息响应接口
export interface UserInfoResponse {
  id: number
  username: string
  phone: string
  email: string
  avatar: string | null
  createTime: string | null
}

// 修改获取用户信息的函数，添加返回类型
export const getUserInfo = () => {
  return request.get<any, UserInfoResponse>('/api/auth/info')
}

// 修改密码
export const changePassword = (data: ChangePasswordRequest) => {
  return request.post('/api/auth/change-password', data)
}
